package agents;

import jade.core.AID;
import jade.core.Agent;
import jade.core.behaviours.SimpleBehaviour;
import jade.domain.DFService;
import jade.domain.FIPAException;
import jade.domain.FIPAAgentManagement.DFAgentDescription;
import jade.domain.FIPAAgentManagement.ServiceDescription;
import jade.lang.acl.ACLMessage;

/**
 * Behaviour zum Registrieren beim Strike Master
 * Das Behaviour bleibt solange Aktiv bis sich der Agent der auf dieses Behaviour
 * zuruckgreift sich beim Strike registrieren konnte
 * 
 * @author thomaskuschmann
 */
@SuppressWarnings("serial")
public class RegisterAtStrikemaster extends SimpleBehaviour {
	private boolean registered;

	public RegisterAtStrikemaster(Agent a) {
		super(a);
	}
	
	@Override
	public void action() {
		// Sucht den Strikemaster
		AID receiver = null;
		// Get all strike agents from the Directory Facilitator (DF):
		DFAgentDescription template = new DFAgentDescription();
		ServiceDescription sd = new ServiceDescription();
		sd.setType(ManagementAgent.SERVICEID_STRIKE_AGENT);
		template.addServices(sd);
		try {
			DFAgentDescription[] result = DFService.search(myAgent, template);
			for (DFAgentDescription desc : result) {
				receiver = desc.getName();
			}
		} catch (FIPAException e) {
			System.err.println(myAgent.getName() + ": Could not query the DF.");
		}

		if (receiver != null) {
			System.out.println(receiver + " gefunden");
			ACLMessage registerAtMaster = new ACLMessage(ACLMessage.INFORM);

			registerAtMaster.addReceiver(receiver);

			// Registriert sich beim Strikemaster
			registerAtMaster.setContent(StrikeAgent.REGISTER_PERFECT);
			myAgent.send(registerAtMaster);

			registered = true;
		}
	}

	@Override
	public boolean done() {
		return registered;
	}
}